#include <ultrasonic.h>
#include <stdio.h>
#include <hi_io.h>
#include <stdlib.h>
#include <hi_gpio.h>
#include <hi_task.h>
#include <hi_time.h>
#include <hi_watchdog.h>
#include <hi_types_base.h>
#include <hi_early_debug.h>
hi_float car_get_distance(hi_void)
{    //(hi_void)hi_gpio_init();
    //hi_io_set_pull(HI_IO_NAME_GPIO_11, HI_IO_PULL_DOWN);  
    //hi_io_set_pull(HI_IO_NAME_GPIO_12, HI_IO_PULL_DOWN);
    ///hi_gpio_set_dir(HI_GPIO_IDX_11,HI_GPIO_DIR_OUT);
   // hi_gpio_set_dir(HI_GPIO_IDX_12,HI_GPIO_DIR_IN);
    static hi_u64 start_time = 0;
    hi_u64 end_time = 0;
    hi_float distance = 0.0;
    hi_gpio_value val;
    int gpio_12_level = GPIO_12_IS_LOW_LEVEL;

    /*超声波echo口，设置为输入模式*/
    hi_io_set_func(HI_IO_NAME_GPIO_12, HI_IO_FUNC_GPIO_12_GPIO);
    hi_gpio_set_dir(HI_GPIO_IDX_12, HI_GPIO_DIR_IN);
    //hi_io_set_func(HI_IO_NAME_GPIO_11, HI_IO_FUNC_GPIO_11_GPIO);
    //hi_gpio_set_dir(HI_GPIO_IDX_11, HI_GPIO_DIR_OUT);
  /*  gpio_control(HI_IO_NAME_GPIO_11, HI_GPIO_IDX_11, HI_GPIO_DIR_OUT, HI_GPIO_VALUE1, HI_IO_FUNC_GPIO_11_GPIO);
    hi_udelay(20);
    gpio_control(HI_IO_NAME_GPIO_11, HI_GPIO_IDX_11, HI_GPIO_DIR_OUT, HI_GPIO_VALUE0, HI_IO_FUNC_GPIO_11_GPIO);
hi_gpio_set_ouput_val(HI_GPIO_IDX_11,HI_GPIO_VALUE1);
    hi_udelay(20);
    hi_gpio_set_ouput_val(HI_GPIO_IDX_11,HI_GPIO_VALUE0);
     给trig发送至少10us的高电平脉冲，以触发传感器测距 */


    /*计算与障碍物之间的距离*/
    while (1) {    gpio_control(HI_IO_NAME_GPIO_11, HI_GPIO_IDX_11, HI_GPIO_DIR_OUT, HI_GPIO_VALUE1, HI_IO_FUNC_GPIO_11_GPIO);
    hi_udelay(20);
    gpio_control(HI_IO_NAME_GPIO_11, HI_GPIO_IDX_11, HI_GPIO_DIR_OUT, HI_GPIO_VALUE0, HI_IO_FUNC_GPIO_11_GPIO);
        hi_gpio_get_input_val(HI_GPIO_IDX_12,&val);

        /*echo为高电平时开始计时*/
        if ((val == HI_GPIO_VALUE1) && (gpio_12_level == GPIO_12_IS_LOW_LEVEL)) {
            start_time = hi_get_us();
            gpio_12_level = GPIO_12_IS_HIGH_LEVEL;
         
        }
     

        /*echo为低电平时纪录结束时间*/
        if ((val == HI_GPIO_VALUE0) && (gpio_12_level == GPIO_12_IS_HIGH_LEVEL)) {
            end_time = hi_get_us() - start_time;
            start_time = 0;
       
     break;} 
  }
    distance = end_time/DISTANCE_FORMULA;

//printf("distance=%f\r\n",distance);
    return distance;
}